/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package desarrollosoft.ghce.dao.implementaciones;

import desarrollosoft.ghce.dao.interfaces.IAntecedenteNoPatologicoDAO;
import desarrollosoft.ghce.entidades.AntecedenteNoPatologico;
import desarrollosoft.ghce.entidades.Aspecto;
import desarrollosoft.ghce.entidades.Paciente;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

/**
 *
 * @author ariel
 */
@Repository("antecedenteNoPatologicoDAO")
public class AntecedenteNoPatologicoDAO implements IAntecedenteNoPatologicoDAO {

    @PersistenceContext
    private EntityManager entityManager;
    
    @Override
    public List<AntecedenteNoPatologico> obtenerAntecedentesNoPatologicos(Paciente paciente) {
        Query consulta = entityManager.createQuery(
                "SELECT a FROM AntecedenteNoPatologico a WHERE a.paciente = :paciente "
                        + "ORDER BY a.aspecto.nombre ASC"
        );
        consulta.setParameter("paciente", paciente);
        return consulta.getResultList();
    }

    @Override
    public List<AntecedenteNoPatologico> obtenerAntecedentesNoPatologicos(Paciente paciente, Aspecto aspecto) {
        Query consulta = entityManager.createQuery(
                "SELECT a FROM AntecedenteNoPatologico a WHERE a.paciente = :paciente AND "
                        + "a.aspecto = :aspecto"
        );
        consulta.setParameter("paciente", paciente);
        consulta.setParameter("aspecto", aspecto);
        return consulta.getResultList();
    }

    @Override
    @Transactional(propagation = Propagation.MANDATORY)
    public void crearAntecedenteNoPatologico(AntecedenteNoPatologico antecedente) {
        entityManager.persist(antecedente);
    }

    @Override
    @Transactional(propagation = Propagation.MANDATORY)
    public void modificarAntecedenteNoPatologico(AntecedenteNoPatologico antecedente) {
        entityManager.merge(antecedente);
    }

    @Override
    @Transactional(propagation = Propagation.MANDATORY)
    public void eliminarAntecedenteNoPatologico(AntecedenteNoPatologico antecedenteNoPatologico) {
        entityManager.remove( entityManager.merge(antecedenteNoPatologico) );
    }
    
}
